from rest_framework import serializers
from django_redis import get_redis_connection


class RegisterSmsCodeSerializer(serializers.Serializer):
    """
    数据没有模型，选择Serializer
    校验发送短信验证码的条件
    """
    text = serializers.CharField(label='图片验证码', max_length=4, min_length=4, required=True)
    image_code_id = serializers.UUIDField(label='UUID', required=True)

    def validate(self, attrs):
        """
        校验图片验证码是否输入正确
        需要用UUID获取图片验证码，所以使用多字段校验
        :param attrs:
        :return:
        """
        #  获取数据
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')
        #  从redis中获取图片验证码的内容
        redis_conn = get_redis_connection('code')
        redis_text = redis_conn.get('img_%s' % image_code_id)
        #  判断是否过期
        if redis_text is None:
            raise serializers.ValidationError('验证码已过期')
        # 判断用户输入的验证码是否正确
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('图片验证码输入错误')
        # 结束需要把attrs返回
        return attrs
